import { defineStore } from 'pinia'
import { ref } from 'vue'
import { reqLogin } from '@/apis/user/index.ts'
import type { loginForm, loginResponseData } from "@/apis/user/type.ts"
import { SET_TOKEN, GET_TOKEN } from "@/utils/token.ts"

const useUserStore = defineStore('User', () => {
  // 导入useRouter来使用路由跳转功能
  const token = ref<string | null>('')//用户唯一token标识符
  token.value = GET_TOKEN()
  // 声明接受的ts数据类型
  const login = async (loginForm: loginForm) => {
    // 异步请求登录接口
    const res: loginResponseData = await reqLogin(loginForm)
    // code==200表示成功
    if (res.code == 200) {
      // pinia备份一份
      token.value = (res.data.token as string)
      // 本地存储要备份一份，以备刷新可以持久化数据
      SET_TOKEN((res.data.token as string))
      return 'ok'
    } else
      return Promise.reject(new Error(res.data.message))
  }
  return {
    login, token
  }
})
// 把useUserStore暴露出去给其他组件使用
// 这种暴露不需要中括号如果是 export const useUserStore则需要中括号
export default useUserStore